package ar.com.tallerdos.smartdinner.activity;

import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import ar.com.tallerdos.smartdinner.R;
import ar.com.tallerdos.smartdinner.business.ComidaBusiness;
import ar.com.tallerdos.smartdinner.data.EntitiesDataManager;
import ar.com.tallerdos.smartdinner.model.Comida;
import ar.com.tallerdos.smartdinner.model.Pedido;
import ar.com.tallerdos.smartdinner.sync.InicialAsyncTask;
import ar.com.tallerdos.smartdinner.sync.MaestroSincronizador;
import ar.com.tallerdos.smartdinner.sync.Notificador;
import ar.com.tallerdos.smartdinner.util.UsrManager;

public class ComidasLista extends Activity {

    public final static String COMIDA_SELECCIONADA = "ar.com.tallerdos.smartdinner.activity.ComidasLista.COMIDA_SELECCIONADA";

    public final static String ACCION_KEY = "ar.com.tallerdos.smartdinner.activity.ComidasLista.ACCION_KEY";
    public final static int ACCION_ABRIR_MESA = 1;
    public final static int ACCION_VER_MESA = 2;

    private List<Comida> comidas;
    private ComidaAdapter comidasAdapter;
    private MaestroSincronizador sincronizador;
    private int selectedItem;
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

        EntitiesDataManager.getInstance().deleteAll();
        new InicialAsyncTask(this).execute();
	
	setTitle(getResources().getString(R.string.smartdinner) + " - " + UsrManager.getInstance().getUsuario().getUsername());
	
	this.sincronizador = MaestroSincronizador.getInstancia();
	this.sincronizador.setComidasActivity(this);
	if (MaestroSincronizador.getInstancia().isAlive() == false) {
	    sincronizador.start();
	}

	setContentView(R.layout.comida_lista_activity);

	ListView comidasListView = (ListView) findViewById(R.id.comidasLista);

	comidas = ComidaBusiness.findAll();

	this.comidasAdapter = new ComidaAdapter();

	comidasListView.setAdapter(this.comidasAdapter);
	comidasListView.setOnItemClickListener(new OnItemClickListener() {

	    @Override
	    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	    selectedItem = position;
		Intent intent = new Intent(ComidasLista.this, ComidaActivity.class);
		intent.putExtra(ACCION_KEY, ACCION_VER_MESA);
		intent.putExtra(COMIDA_SELECCIONADA, comidas.get(position).getId().intValue());
		startActivityForResult(intent, 1);
	    }
	});
	
	final ComidasLista context = this;
	Thread timer = new Thread(){
		public void run(){
			for(;;){
				try {
					Thread.sleep(10000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Notificador dlTask = new Notificador(context);
				dlTask.execute();
			}
		}
	};
	timer.start();
	
    }
    
    public void cargaInicialCompletada() {
	
	
	this.comidas.clear();
	this.comidas.addAll(ComidaBusiness.findAll());
	this.comidasAdapter.notifyDataSetChanged();
	this.sincronizador.setCargaInicialCompleta();
	
    }

    public class ComidaAdapter extends ArrayAdapter<Comida> {

	public ComidaAdapter() {
	    super(ComidasLista.this, R.layout.item_view, comidas);

	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

	    // Chequeo si tiene una vista con la cual trabajar
	    View itemView = convertView;
	    if (itemView == null) {
		itemView = getLayoutInflater().inflate(R.layout.item_view,parent, false);
	    }

	    // Encontrar el item que se busca
	    Comida currentProduct = comidas.get(position);

	    // Completar la vista
	    ImageView imageView = (ImageView) itemView.findViewById(R.id.item_Icon);
	    imageView.setImageResource(R.drawable.ic_table1);

	    // Mesa
	    TextView makeText = (TextView) itemView.findViewById(R.id.icon_Text);
	    makeText.setText(currentProduct.toString());

	    // Fecha
	    TextView makeFecha = (TextView) itemView.findViewById(R.id.textFecha);
	    makeFecha.setText("Inicio: " + currentProduct.getHoraInicio().toString().substring(10, 20));

	    // Comensales
	    TextView makeComensales = (TextView) itemView.findViewById(R.id.textCantidad);
	    makeComensales.setText("Comensales: " + currentProduct.getCantidadComensales().toString());

	    // Notificacion
	    if(currentProduct.getNotificacion() == 1){
	    	ImageView imageNotifView = (ImageView) itemView.findViewById(R.id.icon_notif);
	    	imageNotifView.setImageResource(R.drawable.ic_notif4);
	    	imageNotifView.setVisibility(ImageView.VISIBLE);
	    }
	    else{
	    	ImageView imageNotifView = (ImageView) itemView.findViewById(R.id.icon_notif);
	    	imageNotifView.setVisibility(ImageView.INVISIBLE);
	    }
	    
	    return itemView;

	}
    }

    public void abrirMesa(View view) {
	Intent intent = new Intent(this, ComidaActivity.class);
	intent.putExtra(ACCION_KEY, ACCION_ABRIR_MESA);
	//startActivity(intent);

	startActivityForResult(intent, 1);
    }

    @Override
    protected void onDestroy() {
	super.onDestroy();
	this.sincronizador = null;
	MaestroSincronizador.getInstancia().parar();
        EntitiesDataManager.getInstance().deleteAll();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

	int eliminarNotif = 1;

	if (requestCode == 1) {
	    if (resultCode == RESULT_OK) {
		this.comidas.clear();
		for (Comida c : ComidaBusiness.findAll()) {
		    if (!c.getFacturaEntregada()) {
			this.comidas.add(c);
		    }
		}

		if (this.comidas != null && this.comidas.size() > selectedItem && this.comidas.get(selectedItem) != null) {
		    for (Pedido pedido : this.comidas.get(selectedItem).getPedidos()) {
			if (pedido.getNotificacion() == 1) {
			    eliminarNotif = 0;
			    break;
			}
		    }
		    if (eliminarNotif == 1) {
			this.comidas.get(selectedItem).setNotificacion(0); // Notificacion
		    }
		}

		this.comidasAdapter.notifyDataSetChanged();
	    } else if (resultCode == RESULT_CANCELED) {
	    	
	    	if (this.comidas != null && this.comidas.size() > selectedItem && this.comidas.get(selectedItem) != null) {
			    for (Pedido pedido : this.comidas.get(selectedItem).getPedidos()) {
				if (pedido.getNotificacion() == 1) {
				    eliminarNotif = 0;
				    break;
				}
			    }
			    if (eliminarNotif == 1) {
				this.comidas.get(selectedItem).setNotificacion(0); // Notificacion
			    }
			}

			this.comidasAdapter.notifyDataSetChanged();

	    }
	}
    }
    
    public List<Comida> getComidas(){
    	return this.comidas;
    }
    
    public ComidaAdapter getComidasAdapter(){
    	return this.comidasAdapter;
    }
    
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        EntitiesDataManager.getInstance().deleteAll();
    }
    
}
